Windows NT 3.1是微软
Windows NT的第一代产品,发布于1993年7月27日。用于服务器和商业
桌面操作系统,版本号的选择是为了匹配Windows 3.1,微软当时最新版的
图形用户界面,以表明它们拥有非常类似的用户界面方面的视觉效果。有两个版本的Windows NT 3.1可供选择:Windows NT 3.1 Workstation和Windows NT Advanced Server。它可以运行在Intel x86、DEC Alpha和MIPS R4000的CPU上。
开发历史
Windows NT的开发工作始于1988年11月,当时微软雇用了一组开发人员,他们来自DEC公司,由Dave Cutler领导。许多设计元素反映了DEC在
VMS和
RSX-11上的前期经验。这一操作系统设计以运行于多种指令集结构和每种结构里的多种硬件平台之上。这种平台无关性通过一个叫做HAL的核心模式模块最大程度隐藏在系统其余部分之外。
Windows NT最开始计划用于
OS/23.0,由微软和
IBM联合开发的操作系统的第三版。但当
Windows 3.0于1990年5月发表后,取得了异常的成功,于是微软决定修改当时尚未发表的NT OS/2(它当时叫这个名字)的主要
应用程序接口,由对OS/2 API的扩展改为对
Windows API的扩展。这一决定导致了微软和IBM之间关系的紧张,他们的合作最终破裂。IBM独自继续对
OS/2的开发,而微软则继续在新命名的Windows NT上的开发工作。
Windows NT的首次公开演示,当时它叫作“Windows Advanced Server for LAN Manager”,是在1991年8月的一个开发人员大会上,并于1993年在佐治亚州亚特兰大市召开的Comdex春季展会上正式宣布。
体系结构
Windows NT体系结构是分为用户态与核心态两层的抢先式,可重入的操作系统。可工作在单处理器或
对称多处理器(SMP)上。输入输出基于I/O请求包(I/O Request Packet, IRP)与异步I/O.
用户态下的程序与子系统仅能访问有访问权限的资源,核心态程序可以访问所有资源与外设。Windows NT的内核是一种混合内核。其体系结构包括简单内核,
硬件抽象层(HAL)驱动程序,一些服务(总称为执行体),这些均属于核心态,
Windows NT的用户态包括能够传递I/O请求给适当内核态下的的软件驱动程序的子系统。Windows NT的用户态包括了两个子系统:环境子系统(在不同操作系统类型下执行应用程序);集成子系统(Integral subsystem)执行一些系统相关的函数。
执行体提供了大部分的系统服务功能。位于
硬件抽象层与执行体之间的Windows NT的核心态部分提供了多处理器同步,线程与中断调度与分派,自陷(trap)处理,异常分派。核心态还负责在启动时初始化驱动程序。核心态驱动程序分为三层:高层驱动程序,中层驱动程序,低层驱动程序。Windows驱动程序模型(WDM)存在于中层驱动程序,主要用于二进制与源代码兼容于
Windows 98与
Windows 2000的驱动程序。低层驱动程序或者是Windows NT的老的
设备驱动程序,或者是PnP硬件总线。
用户态
Windows NT操作系统的用户态部分包括两个子系统:环境子系统与集成子系统.
环境子系统运行依据不同操作系统API而写的程序。有3个环境子系统:Win32子系统,OS/2子系统,POSIX子系统,
Win32环境子系统运行32位Windows应用程序。还支持其他环境子系统的控制台或文本窗口,以及Virtual DOS Machine(VDMs)上执行MS-DOS与16位
Windows程序。这通过模拟在Intel 80486上运行MS-DOS 5.0实现. Win32环境子系统进程(csrss.exe)还包含了
窗口管理器以处理输入的键盘鼠标事件,应用程序根据Windows消息来绘制或刷新其窗口。
OS/2环境子系统模拟了OS/2 1.x,支持16位基于字符的OS/2应用程序。但不支持32位字符或图形的OS/2应用程序。运行OS/2 1.x的图形程序,需要安装Windows NT Add-On Subsystem for Presentation Manager。最后一个具有OS/2子系统的是
Windows 2000;
Windows XP不再有OS/2子系统,
POSIX环境子系统支持严格遵照POSIX.1标准及相关ISO/IEC标准写的程序,这一子系统已经被Interix替代,它是Windows Services for UNIX的一部分
集成子系统包括了安全子系统, 工作站服务与服务器服务. 安全子系统处理安全令牌,基于资源许可授予或拒绝用户帐户访问,处理登录请求与初始化登录鉴别,以及管理Active Directory工作站服务子系统提供了计算机访问网络的功能。服务器子系统提供了网络服务功能。
核心态
Windows NT的核心态能访问所有硬件资源,在保护内存区上执行代码控制了调度、线程优先级、内存管理、硬件交互;禁止了用户态的程序与服务访问关键资源,用户态进程必须请求核心态执行这类操作。
核心态的操作系统包含了由许多功能模块组成的执行体服务, 内核驱动程序, 一个(微)内核,一个
硬件抽象层HAL,
执行体
Windows执行体服务建立于低层核心态程序之上,包含在文件NTOSKRNL.EXE中[3]负责处理I/O,对象管理, 安全,进程管理. 划分为几个子系统,包括缓存管理,配置管理,I/O管理, 本地过程调用(LPC),内存管理,对象管理,进程结构与安全引用监视(SRM).这些子系统一起构成了执行体服务.系统服务,即系统调用也是在这一级别上实现,除了极少特例为了高性能而直接调用了内核层。
Object Manager
Object Manager
对象管理器是一个执行体的子系统,所有其他的执行体子系统,特别是系统调用必须通过它来获得对Windows NT资源的访问,这使得对象管理器成为资源管理的基础设施。对象管理器用来避免在其他子系统中管理资源带来的冗余与不安全。在对象管理器视角,每个资源都是一个对象,不论是物理资源(如文件系统或外设),还是逻辑资源(如一个互斥锁)。
缓存控制器
Windows Cache Manager与
内存控制器、I/O控制器、I/O驱动一起为正常的文件I/O提供缓存,这种文件缓存是针对文件块,对本地文件与远程文件提供了一致的服务。实际上这是特殊的文件内存映射。
配置管理器
实现了Windows注册表
i/o(输入/输出)管理器
允许用户态程序与设备的通信。I/O管理器把用户态程序的读写请求翻译给硬件。例如,I/O管理器接收文件系统I/O请求,翻译为对相关设备的调用,与低层设备驱动程序合作执行硬件读写操作。还包括了
I/O操作的cache管理。
本地过程调用(lpc)
提供了一种
进程间通信端口机制。是Microsoft RPC的基础.
内存管理
管理虚拟内存,控制内存保护,以及物理内存与二级存储之间的分页调度,以及物理内存的分配.还能分析PE格式可执行程序,以便映射入或卸载这些程序。
进程结构
处理进程与线程的创建与终止,实现了作业概念(从Windows 2000开始).
即插即用管理器
处理即插即用,支持在启动时的设备检测与安装,按需停止或启动一个设备。它的大部分实际上是在用户态的Plug and Play Service中实现。
处理电源事件(关机,睡眠stand-by,休眠等),通知受影响的驱动程序。
安全引用监视(srm)
强制实行安全规则的子系统[8]通过访问控制表(ACLs)确定一个对象或资源可以被访问。访问控制表由访问控制条目(ACEs)组成.ACE包含了
安全标识符(SID)与授予的操作列表,使得用户帐户、用户组账号、登录会话具有对资源的允许、不允许、审核(audit)等权限
gdi
图形设备接口是负责画线、字体绘制、处理调色板等。在Windows NT 3.x系列操作系统,GDI属于用户态。从Windows NT 4.0,GDI移入了核心态,以提高图形性能。
kernel(内核)
内核(kernel)在HAL与执行体之间,实际上是“微内核”的理念下设计实现出来的。负责多处理器同步,线程与中断的调度与分派,自陷处理,异常分派,在启动时初始化
设备驱动程序等。
核心态驱动
Windows NT使用核心态的设备驱动程序与硬件交互。用户态下的程序看到的设备都是I/O管理器下的文件对象;而I/O管理器自身看到的设备是设备对象。核心态驱动程序分为3个层次:最高层驱动程序,中层驱动程序,低层驱动程序。最高层驱动程序,如FAT或NTFS的文件系统驱动程序,依赖于中层驱动程序。中层驱动程序由功能驱动(function driver)组成。功能驱动依赖于总线驱动,即服务于
总线控制器、适配器(adapter)、桥(bridge)的驱动。Windows Driver Model(WDM)存在于中层。低层驱动直接控制硬件,不依赖于任何其他驱动程序。
硬件抽象是一套软件子程序(routine),模拟了特定平台有关细节,使得程序不必直接访问硬件资源。因而可以写独立于设备的、高性能代码,通过操作系统访问硬件。例如,编译器屏蔽了
CPU指令集的细节,应用程序作者无需考虑与CPU相关的指令。操作系统的硬件抽象使得程序只需调用操作系统级的操作,而屏蔽了硬件具体细节,使得程序具有了可移植性。
操作系统的硬件抽象层位于硬件与软件之间。对操作系统内核隐藏了硬件的大部分差异,使得核心态代码基本不需要改变即可运行于不同硬件配置的计算机上。硬件抽象大都是硬件驱动程序。被屏蔽的硬件信息包括I/O界面、中断设置、多处理器通信机制等。
得名由来
为了提高可移植性,避免制造一个以x86为中心的设计方案,起初这一操作系统的定位是Intel i860CPU,代号为N10(英文读作“N-Ten”),NT操作系统家族便由此得名。但i860“严重落后于计划”,于是NT小组在i860原型硬件(代号为Dazzle)交付之前使用了一个模拟器,对其它平台的支持将随后提供。
类似性
Windows NT 3.1的用户界面与Windows 3.1的非常相似,以至于人们有时候会把它与Windows 3.1相混淆,这也使那些以前在Windows 3.x上有使用经验的人们用起该操作系统来非常容易。